package com.qianchang.microfinance.utils;

/**
 * 版    权:  深圳市迪蒙网络科技有限公司
 * 描    述:  <描述>
 * 修 改 人:  zhoulai
 * 修改时间:  2017/4/6
 */

public class CalUtils {

    /**
     * 每月付息到期还本
     *
     * @param applyMoney 本金
     * @param monthsRate 月利率
     * @param time       时间
     * @return 还款金额
     * 贷款本金×[1+月利率（‰）×贷款期（月）]
     */
    public static double calEveryMonth(double applyMoney, double monthsRate, int time) {
        return applyMoney * (monthsRate * time);
    }

    /**
     * 等额本息
     *
     * @param applyMoney 本金
     * @param monthsRate 月利率
     * @param time       时间
     * @return 还款金额
     * 借款金额×月利率×（1+月利率）^还款月数÷ [（1+月利率）^还款月数 — 1]   *   时间
     */
    public static double calSameBenXi(double applyMoney, double monthsRate, int time) {
        double paybackAmount = 0.00;
        try {
            double pow = Math.pow(1 + monthsRate, time);
            double result = pow / (pow - 1);
            double everyMonthApply = applyMoney * monthsRate * result;
            paybackAmount = everyMonthApply * time - applyMoney;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return paybackAmount;
    }


    /**
     * 等额本金
     *
     * @param applyMoney 本金
     * @param monthsRate 月利息/月利率
     * @param time       时间
     * @return 还款金额
     * 〔(总贷款额÷还款月数+总贷款额×月利率)+总贷款额÷还款月数×(1+月利率)〕÷2×还款
     */
    public static double calSameBenJin(double applyMoney, double monthsRate, int time) {
        double v = applyMoney / time + applyMoney * monthsRate;
        return (v + applyMoney / time * (1 + monthsRate)) / 2 * time - applyMoney;
    }

    /**
     * 一次性付清
     * @param applyMoney 本金
     * @param monthsRate 月利率
     * @param time       时间
     * @return 还款金额
     * 还款月数*月利率*本金 + 本金
     */
    public static double calOneTimePay(double applyMoney, double monthsRate, int time) {
        return monthsRate * applyMoney * time;
    }

    /**
     * 实际到账
     */
    private static final String TAG = "CalUtils";

    public static double calRealMoney(double applyMoney, double borrowFeeRate) {
        return applyMoney - applyMoney * borrowFeeRate;
    }

    /**
     * 计算每天的利率
     *
     * @param percent      用户等级
     * @param dayFee       天费率
     * @param levelRate    信用等级
     * @param deadLineRate 借款期限
     * @return 借款天费用
     */
    public static double calDayFeeRate(double percent, double dayFee, double levelRate, double deadLineRate) {
        return percent * dayFee * levelRate * deadLineRate;
    }

}
